import SparkMD5 from "spark-md5";

/**
 * 用spark-md5库对文件进行切片生成文件Hash值，作用就是标识。
 * 根据Hash值进行秒传等操作。用FileReader读取文件切片。
 */

/**
 * @description: 生成文件Hash
 * @param {*}
 * @return {*}
 */
export const createMD5 = (fileChunkList) => {
  return new Promise((resolve, reject) => {
    const slice =
      File.prototype.slice ||
      File.prototype.mozSlice ||
      File.prototype.webkitSlice;
    const chunks = fileChunkList.length;
    let currentChunk = 0;
    let spark = new SparkMD5.ArrayBuffer();
    let fileReader = new FileReader();
    // 读取文件切片
    fileReader.onload = function (e) {
      spark.append(e.target.result);
      currentChunk++;
      if (currentChunk < chunks) {
        loadChunk();
      } else {
        // 读取切片，返回最终文件的Hash值
        resolve(spark.end());
      }
    };

    fileReader.onerror = function (e) {
      reject(e);
    };

    function loadChunk() {
      fileReader.readAsArrayBuffer(fileChunkList[currentChunk]);
    }

    loadChunk();
  });
};
